在 js 中,通过 nunjucks.render(模板名 name , 数据 context)
来得到页面数据,可通过 res.end(数据)
将页面传递出去。
注释
1{# 注释 #}变量
1{{ 变量名 }}if 判断
1234567{% if 条件1 %}执行内容1;{% elif 条件2 %}执行内容2;{% else %}执行内容3;{% endif %}for 循环
for 可以遍历数组和对象12345<ul>{% for item in items %}<li>{{ item }}</li>{% endfor %}</ul>
macro 宏命令
12345678{#定义了一个名为user的方法, 传入参数name#}{% macro user(name) %}<h1> {{ name }} </h1>{% endmacro %}{#调用函数#}{{user('小明')}}{{user('小红')}}模版继承
观察各种网站可以发现,网站的结构实际上是类似的,头部、尾部都是固定格式,只有中间页面部分内容不同。如果每个模板都重复头尾,一旦要修改头部或尾部,那就需要改动所有模板。
更好的方式是使用继承。先定义一个基本的网页框架 base.html1234567891011{% block header %}<h3>Unnamed</h3>{% endblock %}{% block body %}<div>No body</div>{% endblock %}{% block footer %}<div>copyright</div>{% endblock %}base.html 定义了三个可编辑的块,分别是
header
、body
、footer
。子模版也可以有选择地对块重新定义。12345{% extends 'base.html' %}{% block header %}<h1>{{ header }}</h1>{% endblock %}{% block body %}<p>{{ body }}</p>{% endblock %}然后对子模版进行渲染:
1234console.log(env.render('extend.html', {header: 'Hello',body: 'bla bla bla...'}));输出 HTML 如下:
123<h1>Hello</h1><p>bla bla bla...</p><div>copyright</div> <-- footer没有重定义,所以仍使用父模板的内容include
include 可引入其他的模板12{#复制 index.njk 的内容#}{% include "index.njk" %}import
user.njk:123{% macro create(content) %}<p>{{content}}</p>{% endmacro %}通过导入 user.njk,相当于将其赋值给 user
const user = require(‘user’);12{% import 'user.njk' as user %}{{user.create('内容')}}